import axios from 'axios'
import qs from 'qs'
import utils from '../utils'
import { Message } from 'element-ui'

let root

if (location.href.includes('192')) { //  当在本地运行的时候
  root = '' // 测试环境域名
} else {
  root = '' // 正式环境域名
}

axios.interceptors.request.use(config => {
  return config
}, error => {
  return Promise.reject(error)
})

axios.interceptors.response.use(response => {
  if (response.data.flag === false) {
    Message.error(response.data.msg)
    // debugger
    if (response.data.msg === '请重新登录') {
      window.router.replace('/')
    }
  }
  return response.data
}, error => {
  // console.dir(error)
  // 断网 或者 请求超时 状态
  if (!error.response) {
    // 请求超时状态
    if (error.message.includes('timeout')) {
      Message.error('请求超时，请检查网络是否连接正常')
    } else {
      // 断网
      Message.error('请求失败，请检查网络是否已连接')
    }
    return
  }
  const responseCode = error.response.status
  switch (responseCode) {
    case 400: Message.error('缺少请求参数'); break
    case 405: Message.error('请求方法POST与GET错误'); break
    case 404: Message.error('网络请求不存在'); break
    case 500: Message.error('服务器端错误！'); break
    case 502: Message.error('服务器异常或正在重启，请稍等'); break
  }
  return Promise.resolve(error.response)
})

function apiAxiosPromise(method, url, data) {
  utils.objKeySort(data)
  return axios({
    method: method,
    baseURL: root,
    url: url,
    data: method === 'POST' ? qs.stringify(data) : null,
    params: method === 'GET' ? data : null
  })
}

function apiAxios(method, url, data, success, resType) {
  utils.objKeySort(data)
  axios({
    method: method,
    baseURL: root,
    url: url,
    data: method === 'POST' ? qs.stringify(data) : null,
    params: method === 'GET' ? data : null,
    responseType: resType === 'json' ? 'json' : 'blob'
  }).then(r => {
    if (r.flag === false) {
      //  这里可以做一些处理
    }
    success(r)
  })
}

export default {
  root: root,
  post(url, data, success, resType = 'json') {
    if (success) {
      return apiAxios('POST', url, data, success, resType)
    } else {
      return apiAxiosPromise('POST', url, data)
    }
  },
  get(url, data, success, resType = 'json') {
    if (success) {
      return apiAxios('GET', url, data, success, resType)
    } else {
      return apiAxiosPromise('GET', url, data)
    }
  }
}
